package iam

import (
	"time"
)

// Role 角色表模型
type Role struct {
	ID          uint64    `gorm:"primary_key;auto_increment" json:"id"`
	Name        string    `gorm:"type:varchar(100);uniqueIndex;not null;comment:角色名称" json:"name"`
	Code        string    `gorm:"type:varchar(100);uniqueIndex;not null;comment:角色代码" json:"code"`
	Description string    `gorm:"type:varchar(500);comment:角色描述" json:"description"`
	IsBuiltin   bool      `gorm:"default:false;comment:是否为内置角色" json:"is_builtin"`
	Status      int       `gorm:"type:tinyint;default:1;comment:状态 1:启用 2:禁用" json:"status"`
	Sort        int       `gorm:"default:0;comment:排序" json:"sort"`
	CreateBy    uint64    `gorm:"comment:创建人ID" json:"create_by"`
	UpdateBy    uint64    `gorm:"comment:更新人ID" json:"update_by"`
	CreateTime  time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
	UpdateTime  time.Time `gorm:"autoUpdateTime;comment:更新时间" json:"update_time"`
}

// TableName 指定表名
func (Role) TableName() string {
	return "roles"
}

// UserRole 用户角色关系表
type UserRole struct {
	ID         uint64    `gorm:"primary_key;auto_increment" json:"id"`
	UserID     uint64    `gorm:"not null;comment:用户ID" json:"user_id"`
	RoleID     uint64    `gorm:"not null;comment:角色ID" json:"role_id"`
	CreateBy   uint64    `gorm:"comment:创建人ID" json:"create_by"`
	CreateTime time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
}

// TableName 指定表名
func (UserRole) TableName() string {
	return "user_roles"
}

// GroupRole 用户组角色关系表
type GroupRole struct {
	ID         uint64    `gorm:"primary_key;auto_increment" json:"id"`
	GroupID    uint64    `gorm:"not null;comment:用户组ID" json:"group_id"`
	RoleID     uint64    `gorm:"not null;comment:角色ID" json:"role_id"`
	CreateBy   uint64    `gorm:"comment:创建人ID" json:"create_by"`
	CreateTime time.Time `gorm:"autoCreateTime;comment:创建时间" json:"create_time"`
}

// TableName 指定表名
func (GroupRole) TableName() string {
	return "group_roles"
}

// 角色状态常量
const (
	RoleStatusEnabled  = 1 // 启用
	RoleStatusDisabled = 2 // 禁用
)

// 内置角色代码常量
const (
	RoleCodeSuperAdmin = "super_admin"    // 超级管理员
	RoleCodeAdmin      = "admin"          // 一般管理员
	RoleCodeUser       = "user"           // 普通用户
)